import axios from 'axios'

//! 原来的axios不能定义返回值类型，拓展moudle，接收类型参数，参数为服务器返回内容的类型
declare module 'axios' {
  export interface AxiosInstance {
    <T>(config: AxiosRequestConfig): Promise<T>
    request<T>(config: AxiosRequestConfig): Promise<T>
  }
}

//* 创建一个带有默认配置的axios子对象，所有通过这个子对象发送的请求都会受到该配置的处理
const request = axios.create({
  baseURL: '/api', //公告的请求地址前缀，会自动拼接
  // baseURL: 'http://112.74.112.76:3333', //公告的请求地址前缀，会自动拼接
  timeout: 10000, // "请求超时时间" 超时后请求中断
})

request.interceptors.request.use((config) => {
  const sid = localStorage.getItem('sid')

  config.params = {
    ...config.params,
    sid,
  }
  return config
})

request.interceptors.response.use(
  (res) => (res.data.code === 0 ? res.data.data : Promise.reject(res.data)),
  (err) => alert(err.message), //断网会走这里
)

export { request }
